// #ifndef __encoder_H
// #define	__encoder_H

// #include "ti_msp_dl_config.h"
// #include <ti/driverlib/dl_timer.h>

// // 定义全局变量声明（如果有需要）
// extern unsigned char stop;

// 定义求绝对值宏
#define ABS(a)      (a>0? a:(-a))//绝对值电机速度正负

// // 电机A方向控制引脚宏定义，根据新的引脚定义修改
// #define AIN1_OUT(X)  ( (X)? (DL_GPIO_setPins(TB6612_AIN1_PORT, TB6612_AIN1_PIN)) : (DL_GPIO_clearPins(TB6612_AIN1_PORT, TB6612_AIN1_PIN)) )
// #define AIN2_OUT(X)  ( (X)? (DL_GPIO_setPins(TB6612_AIN2_PORT, TB6612_AIN2_PIN)) : (DL_GPIO_clearPins(TB6612_AIN2_PORT, TB6612_AIN2_PIN)) )

// // 电机B方向控制引脚宏定义，根据新的引脚定义修改
// #define BIN1_OUT(X)  ( (X)? (DL_GPIO_setPins(TB6612_BIN1_PORT, TB6612_BIN1_PIN)) : (DL_GPIO_clearPins(TB6612_BIN1_PORT, TB6612_BIN1_PIN)) )
// #define BIN2_OUT(X)  ( (X)? (DL_GPIO_setPins(TB6612_BIN2_PORT, TB6612_BIN2_PIN)) : (DL_GPIO_clearPins(TB6612_BIN2_PORT, TB6612_BIN2_PIN)) )

// // 电机初始化函数声明
// void Motor_Init(void);
// // 读取编码器计数值函数声明，明确返回值类型为int
// int Motor_Get_Encoder(int dir); // 0表示读取A编码器，1表示读取B编码器，读取编码器的计数值
// // 限制函数声明，参数为指针类型，用于修改电机相关参数
// void Limit(int *motoA, int *motoB);
// // 电机控制函数声明，明确参数类型和含义
// void BO_Control(unsigned char dir, uint32_t speed);
// // 电机负载设置函数声明，明确参数类型
// void motol_load(int32_t speed1, int32_t speed2);
// // 停止函数声明，明确参数类型为指针
// void Stop(float *Med_Jiaodu, float *Jiaodu);

// #endif


#ifndef _ENCODER_H_
#define _ENCODER_H_

#include "headfile.h"


typedef struct{
    int Should_Get_Encoder_Count;   
}Encoder;

//extern double Pulse_Count_1s;
extern unsigned char motorA_dir, motorB_dir;
//extern int Pulse_Count_A; // 编码器A速度
//extern int Pulse_Count_B; // 编码器B速度
extern int Pulse_targetA; // 目标速度
extern int Pulse_targetB; // 目标速度
extern unsigned char motorA_dir, motorB_dir; // 控制电机方向，1正，0反
extern volatile Encoder Encoder_A;
extern volatile Encoder Encoder_B;

extern int cnt;

#define ADIR1                                                                    \
	do                                                                           \
	{                                                                            \
		DL_GPIO_setPins(MG310_PORT, MG310_AIN1_PIN);   \
		DL_GPIO_clearPins(MG310_PORT, MG310_AIN2_PIN); \
	} while (0)
#define ADIR0                                                                    \
	do                                                                           \
	{                                                                            \
		DL_GPIO_clearPins(MG310_PORT, MG310_AIN1_PIN); \
        DL_GPIO_setPins(MG310_PORT, MG310_AIN2_PIN);   \
	} while (0)
#define BDIR1                                                                    \
	do                                                                           \
	{                                                                            \
		DL_GPIO_setPins(MG310_PORT, MG310_BIN1_PIN);   \
        DL_GPIO_clearPins(MG310_PORT, MG310_BIN2_PIN); \
	} while (0)
#define BDIR0                                                                    \
	do                                                                           \
	{                                                                            \
		DL_GPIO_clearPins(MG310_PORT, MG310_BIN1_PIN); \
        DL_GPIO_setPins(MG310_PORT, MG310_BIN2_PIN);   \
	} while (0)

#define ADUTY_SET(DUTY) (DL_TimerG_setCaptureCompareValue(PWM_0_INST, DUTY, GPIO_PWM_0_C1_IDX))
#define BDUTY_SET(DUTY) (DL_TimerG_setCaptureCompareValue(PWM_0_INST, DUTY, GPIO_PWM_0_C0_IDX))

//设置电机2的PWM占空比（取绝对值）
//     DL_TimerG_setCaptureCompareValue(PWM_0_INST, ABS(speed2), GPIO_PWM_0_C0_IDX)





void Motor_Init(void);
void Motor_dir(unsigned char motorA_dir, unsigned char motorB_dir);
void MotorA_Set_Duty(unsigned int Duty);
void MotorB_Set_Duty( unsigned int Duty);
void Motor_Init(void);

void TIMER_1_INST_IRQHandler(void);
void GROUP1_IRQHandler(void);


#endif
 
